﻿#define _CRT_SECURE_NO_WARNINGS
#include<iostream>

using namespace std;

//int main()
//{
//	int a = 2.2;
//	cout << a << endl;
//	return 0;
//}


//class A
//{
//public :
//
//	explicit A(int a1)
//		: _a1(a1)
//	{}
//
//	explicit A(int a1, int a2)
//		:_a1(a1)
//		, _a2(a2)
//	{}
//	void Print()
//	{
//		cout << _a1 << " " << _a2 << endl;
//	}
//private:
//	int _a1 = 1;
//	int _a2 = 2;
//};
//int main()
//{
//	A aa1 = 5;
//	aa1.Print();
//
//	//const A& aa1 = 10;
//
//	return 0;
//}
//
//class Stack
//{
//public:
//
//	void Push(const A& aa)
//	{
//		//···
//	}
//private:
//	A _arr[10];
//	int _top;
//};

//int main()
//{
//	Stack st;
//
//	A aa1(1);
//	st.Push(aa1);
//
//	A aa2(2);
//	st.Push(aa2);
//
//	return 0;
//}
//
//int main()
//{
//	A aa1 = { 3,3 };
//	aa1.Print();
//
//	return 0;
//}
//
//
class A
{
public :
	A()
	{
		++_scount;
	} 
	A(const A& t)
	{
		++_scount;
	} 
	~A()
	{
		--_scount;
	} 

	//静态成员函数
	static int GetACount()
	{
		_a;
		return _scount;
	}

private:
	// 类⾥⾯声明
	static int _scount;
	int _a;

};
//
////在类外初始化
int A::_scount = 0;
//
int main()
{
	//指定类域就可以访问_scount(公有情况下）
	//因为_scount并不在某个对象中
	//cout << a::_scount << endl;

	//cout << sizeof(A) << endl;
	return 0;
}
//int main()
//{
//	cout << A::GetACount() << endl;
//	A a1, a2;
//
//	{
//		A a3(a1);
//		cout << A::GetACount() << endl;
//	}
//
//
//	cout << a1.GetACount() << endl;
//
//	return 0;
//}


////A：D B A C
////B：B A D C
////C：C D B A
////D：A B D C
////E：C A B D
////F：C D A B
//
//C c;
//int main()
//{
//	A a;
//	B b;
//	static D d;
//	return 0;
//}


//// 前置声明，都则A的友元函数声明编译器不认识B
//class B;
//
//class A
//{
//	// 友元声明
//	friend void func(const A& aa, const B& bb);
//
//private:
//	int _a1 = 1;
//	int _a2 = 2;
//};
//class B
//{
//	// 友元声明
//	friend void func(const A & aa, const B & bb);
//	private:
//	int _b1 = 3;
//	int _b2 = 4;
//};
//void func(const A& aa, const B& bb)
//{
//	cout << aa._a1 << endl;
//	cout << bb._b1 << endl;
//}
//
//int main()
//{
//
//	return 0;
//}


//class A
//{
//	// 友元声明
//	friend class B;
//private:
//	int _a1 = 1;
//	int _a2 = 2;
//};
//class B
//{
//public :
//	void func1(const A& aa)
//	{
//		cout << aa._a1 << endl;
//		cout << _b1 << endl;
//	
//	} 
//	void func2(const A& aa)
//		{
//			cout << aa._a2 << endl;
//			cout << _b2 << endl;
//		}
//private:
//	int _b1 = 3;
//	int _b2 = 4;
//};
//int main()
//{
//	A aa;
//	B bb;
//	bb.func1(aa);
//	bb.func1(aa);
//	return 0;
//}

//
//class A
//{
//private :
//	//static int _k;
//	int _h = 1;
//
//	void Push()
//	{
//		_b++;
//	}
//public:
//	class B 
//	{
//	public :
//		void foo(const A & a)
//		{
//			//cout << _k << endl; 
//			cout << a._h << endl; 
//		}
//	private:
//		int _b;
//
//	};
//};
//int main()
//{
//	cout << sizeof(A) << endl;
//	return 0;
//}

//int main()
//{
//	A::B b;
//	A aa;
//	b.foo(aa);
//	return 0;
//}

//int main()
//{
//	A aa1;
//	
//	//不能这样
//	//因为分不清是实例化还是函数声明
//	A aa2();
//	return 0;
//}

//int main()
//{
//	A();
//	return 0;
//}

//
//class Solution {
//public:
//	int Sum_Solution(int n) 
//	{
//		//...
//		return n;
//	}
//};
//int main()
//{
//	Solution aa1;
//	cout << aa1.Sum_Solution(10) << endl;
//
//	cout << Solution().Sum_Solution(10) << endl;
//	return 0;
//}
//
//int main()
//{
//	//匿名对象是常性，用const引用
//	const Solution& a = Solution();
//	return 0;
//}